/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.fd.domain.query;

import com.sun.org.apache.xpath.internal.operations.Bool;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

/**
 *
 *
 * @author ssl
 * @date 2021-1-16
 */
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class DocumentQuery {

	private static final int DEFAULT_PAGE_SIZE = 20;
	private static final int MAX_PAGE_SIZE = 1000;

	/**
	 * 返回记录的起始位置。
	 */
	private Integer offset;

	/**
	 * 返回记录的个数。
	 */
	private Integer rows;

	/**
	 * 文档编号
	 */
	private String documentCode;
	/**
	 * 多条文档Id
	 */
	private List<Long> documentIds;
	/**
	 * 文档Id
	 */
	private Long documentId;
	/**
	 * 文档名称
	 */
	private String documentName;
	/**
	 * 文档类型：0-未定义，1-文档，2-表格，3-演示稿，4-图片，5-音频，6-视频
	 */
	private Integer documentType;
	/**
	 * 文档属性
	 */
	private String type;
	/**
	 * 是否是最新版本：0-是最新版本，1-不是最新版本
	 */
	private Integer latestVersionFlag;
	/**
	 * 文件夹Id
	 */
	private Long folderId;
	/**
	 * 知识库Id
	 */
	private Long repositoryId;
	/**
	 * 状态：0-未发布，1-已发布，2-未更新，4-已更新
	 */
	private Integer status;
	/**
	 * 文件扩展名
	 */
	private String fileExtension;
	/**
	 * 文件大小，单位字节
	 */
	private Long fileSize;
	/**
	 * 版本号
	 */
	private String version;
	/**
	 * 线索Id，用于串联文档的各版本
	 */
	private Long threadId;
	/**
	 * 文件路径
	 */
	private String path;
	/**
	 * 文件路径，用于显示文件所在目录
	 */
	private String location;
	/**
	 * 最近访问时间
	 */
	private LocalDateTime accessTime;
	/**
	 * 租户Id，0表示不指定
	 */
	private Long tenantId;
	/**
	 * 创建人Id
	 */
	private Long createUserId;
	/**
	 * 创建时间
	 */
	private LocalDateTime createTime;
	/**
	 * 更新时间
	 */
	private LocalDateTime updateTime;
	/**
	 * 流程锁：0-正常，1-锁定
	 */
	private Boolean documentFlowLock;
	/**
	 * 删除标识：0-正常，1-删除
	 */
	private Boolean deleteFlag;

	/**
	 * 构建一个查询。
	 *
	 * @param	pageIndex	页索引
	 */
	public DocumentQuery(Integer pageIndex) {
		this(pageIndex, DEFAULT_PAGE_SIZE);
	}

	/**
	 * 构建一个查询。
	 *
	 * @param	pageIndex	页索引
	 * @param	pageSize	页大小
	 */
	public DocumentQuery(Integer pageIndex, Integer pageSize) {
		int index = pageIndex == null ? 0 : pageIndex;
		int size = pageSize == null ? DEFAULT_PAGE_SIZE : pageSize;
		this.offset = index * size;
		this.rows = size;
	}

	/**
	 * 构造符合条件的查询对象，仅返回一条
	 *
	 * @return
	 */
	public static DocumentQueryBuilder one() {
		return DocumentQuery.builder().offset(0).rows(1);
	}

	/**
	 * 构造符合条件的查询对象，控制返回的记录上限
	 *
	 * @return
	 */
	public static DocumentQueryBuilder max() {
		return DocumentQuery.builder().offset(0).rows(MAX_PAGE_SIZE);
	}

}
